// globals 包提供了不同 JavaScript 环境（如浏览器、Node.js 等）中的全局变量列表，
import globals from 'globals';
import jsEslint from '@eslint/js';
import tsEslint from 'typescript-eslint';
import vueEslint from 'eslint-plugin-vue';
import eslintConfigPrettier from "eslint-config-prettier";


export default [
    /**
     * 忽略的文件
     * */
    {
        ignores: [
            '**/*.d.ts',
            'dist',
            'node_modules',
            'public',
            '.vscode',
            '.idea',
        ],
    },
    /**
     * 配置全局变量和语言环境
     * globals.browser 的作用：globals.browser 是一个对象，包含了所有浏览器环境下的全局变量，例如 window、document、navigator 等。
     * 将它赋值给 ESLint 的 languageOptions.globals 配置项后，ESLint 会识别这些全局变量为已定义，从而避免报错或警告。
     * */
    {
        languageOptions: {
            globals: {
                ...globals.browser,
                ...globals.node,
            },
            ecmaVersion: 'latest', // 使用最新的 ECMAScript 语法
            sourceType: 'module', // 代码是 ECMAScript 模块
        }
    },
    /**
     * js推荐规则
     * */
    jsEslint.configs.recommended,
    /**
     * ts推荐规则
     * */
    ...tsEslint.configs.recommended,
    /**
     * vue基础规则
     * */
    ...vueEslint.configs['flat/essential'],
    /**
     * vue 规则
     * */
    {
        files: ['**/*.vue'],
        languageOptions: {
            parserOptions: {
                parser: tsEslint.parser
            }
        },
        rules: {
            'vue/multi-word-component-names': 'off',
        }
    },
    /**
     * js,ts,vue基础规则
     * */
    {
        files: ['**/*.{js,ts,vue}'],
        rules: {
            semi: ['error'], // 语句末尾不加分号
            indent: ['error', 2], // 缩进使用 2 个空格
            quotes: ['error', 'single'], // 使用单引号
            'prefer-const': 'error',
            'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 生产环境中警告 console 使用，开发环境中关闭规则
            'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', // 生产环境中警告 debugger 使用，开发环境中关闭规则
        },
    },
    eslintConfigPrettier
];
